package com.ticket.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ticket.system.domain.vo.EvaluateVo;
import com.ticket.system.domain.vo.TicketStatistics;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ticket.common.annotation.Excel;
import com.ticket.common.core.domain.BaseEntity;
import org.springframework.data.annotation.Transient;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * 演出对象 yanchu_perform
 * 
 * @date 2023-09-27
 */
@ApiModel(description = "演出对象")
public class YanchuPerform extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 演出编号 */
    private Long id;

    /** 演出名称 */
    @NotNull(message = "演出名称不可以为空")
    @ApiModelProperty(value = "演出名称")
    @Excel(name = "演出名称")
    @Size(min = 1, max = 50, message = "演出名称长度不能超过50个字")
    private String performName;

    /** 演出时长(单位: 分钟) */
//    @NotNull(message = "演出时长不可以为空")
    @ApiModelProperty(value = "演出时长")
    @Excel(name = "演出时长(单位: 分钟)")
    private Long performLength;
    @NotNull(message = "演出海报不可以为空")
    @ApiModelProperty(value = "演出海报")
    /** 演出海报 */
    @Excel(name = "演出海报")
    @NotNull(message = "演出海报不可以为空")
    private String performPoster;

    /** 演出区域 */
    @Excel(name = "演出区域")
    private String performArea;

    /** 演出时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "演出时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date releaseDate;

    /** 总票房 */
    @Excel(name = "总票房")
    private BigDecimal performBoxOffice;

    /** 简介 */
    @NotNull(message = "简介不可以为空")
    @ApiModelProperty(value = "简介")
    @Excel(name = "简介")
    //@Size(min = 1, max = 10000, message = "演出简介长度不能超过10000个字")
    private String performIntroduction;

    /** 图集 */
    @Excel(name = "图集")
    private String performPictures;

    /** 删除标记，0未删除，1删除，默认0 */
    @Excel(name = "删除标记，0未删除，1删除，默认0")
    private Integer delState;

    /** 是否有优惠 0 没有 1有 */
    @Excel(name = "是否有优惠 0 没有 1有")
    private Integer hasPromotion;
    @Excel(name = "演出类型")
    @NotNull(message = "演出类型不可以为空")
    private Long performType;
    @Excel(name = "演出来源 1:主办；2合办；3：租场")
    private Integer performFrom;
    @Excel(name = "入场时间")
//    @NotNull(message = "入场时间不可以为空")
    private Integer enterType;
    @NotNull(message = "购票说明不可以为空")
    @ApiModelProperty(value = "简介")
    @Excel(name = "购票说明")
    //@Size(min = 1, max = 10000, message = "购票说明长度不能超过1000个字")
    private String ticketIntroduction;
    @ApiModelProperty(value = "剧院名称")
    @Transient
    private String deptName;

    @ApiModelProperty(value = "创建人")
    @Transient
    private String createName;
    @ApiModelProperty(value = "简称")
    @NotNull(message = "简称不可以为空")
    @Size(min = 1, max = 16, message = "简称长度不能超过16个字")
    private String simpleName;
    @ApiModelProperty(value = "观演须知")
    @NotNull(message = "观演须知不可以为空")
    //@Size(min = 1, max = 1000, message = "观演须知长度不能超过1000个字")
    private String performKnow;
    @ApiModelProperty(value = "儿童购票自定义内容")
    private String childTicket;
    @ApiModelProperty(value = "儿童购票类型 1:儿童一律凭票入场;2:1.2米及以上凭成人票入场，1.2米以下谢绝入场;3:儿童免票，需家长陪同;4:自定义")
    private Integer childTicketType;
    @ApiModelProperty(value = "剧院id")
    private Long operaId;

    @Transient
    private Integer type;

    @Transient
    private List<Long> performIds;
    @Transient
    @ApiModelProperty(value = "演出类型名称")
    private String performTypeName;

    @Transient
    @ApiModelProperty(value = "剧院名称")
    private String operaName;
    @Transient
    @ApiModelProperty(value = "最大价格")
    private String maxPrice;
    @Transient
    @ApiModelProperty(value = "最小价格")
    private String minPrice;
    @Transient
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    @Transient
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    @Transient
    @ApiModelProperty(value = "1:实名票；2：非实名")
    private Integer autType;
    @Transient
    @ApiModelProperty(value = "1：电子票；2：纸质票")
    private Integer isTickets;
    @Transient
    @ApiModelProperty(value = "剧场")
    private String hallName;

    @ApiModelProperty(value = "中场休息 0无 单位分钟")
    private Integer middleTime;

    @ApiModelProperty(value = "是否测试 0 否1是")
    private Integer isTest;

    public Integer getIsTest() {
        return isTest;
    }

    public void setIsTest(Integer isTest) {
        this.isTest = isTest;
    }


    public Integer getMiddleTime() {
        return middleTime;
    }

    public void setMiddleTime(Integer middleTime) {
        this.middleTime = middleTime;
    }


    @ApiModelProperty(value = "演出的评价数据")
    @Transient
    private EvaluateVo evaluateVo;

    public String getSimpleName() {
        return simpleName;
    }

    public void setSimpleName(String simpleName) {
        this.simpleName = simpleName;
    }

    @Transient
    private TicketStatistics ticketStatistics;
    public TicketStatistics getTicketStatistics() {
        return ticketStatistics;
    }

    public void setTicketStatistics(TicketStatistics ticketStatistics) {
        this.ticketStatistics = ticketStatistics;
    }

    public String getCreateName() {
        return createName;
    }

    public void setCreateName(String createName) {
        this.createName = createName;
    }


    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public Long getPerformType() {
        return performType;
    }

    public void setPerformType(Long performType) {
        this.performType = performType;
    }

    public Integer getPerformFrom() {
        return performFrom;
    }

    public void setPerformFrom(Integer performFrom) {
        this.performFrom = performFrom;
    }

    public Integer getEnterType() {
        return enterType;
    }

    public void setEnterType(Integer enterType) {
        this.enterType = enterType;
    }

    public String getTicketIntroduction() {
        return ticketIntroduction;
    }

    public void setTicketIntroduction(String ticketIntroduction) {
        this.ticketIntroduction = ticketIntroduction;
    }

    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }
    public void setPerformName(String performName) 
    {
        this.performName = performName;
    }

    public String getPerformName() 
    {
        return performName;
    }
    public void setPerformLength(Long performLength) 
    {
        this.performLength = performLength;
    }

    public Long getPerformLength() 
    {
        return performLength;
    }
    public void setPerformPoster(String performPoster) 
    {
        this.performPoster = performPoster;
    }

    public String getPerformPoster() 
    {
        return performPoster;
    }
    public void setPerformArea(String performArea) 
    {
        this.performArea = performArea;
    }

    public String getPerformArea() 
    {
        return performArea;
    }
    public void setReleaseDate(Date releaseDate) 
    {
        this.releaseDate = releaseDate;
    }

    public Date getReleaseDate() 
    {
        return releaseDate;
    }
    public void setPerformBoxOffice(BigDecimal performBoxOffice) 
    {
        this.performBoxOffice = performBoxOffice;
    }

    public BigDecimal getPerformBoxOffice() 
    {
        return performBoxOffice;
    }
    public void setPerformIntroduction(String performIntroduction) 
    {
        this.performIntroduction = performIntroduction;
    }

    public String getPerformIntroduction() 
    {
        return performIntroduction;
    }
    public void setPerformPictures(String performPictures) 
    {
        this.performPictures = performPictures;
    }

    public String getPerformPictures() 
    {
        return performPictures;
    }
    public void setDelState(Integer delState) 
    {
        this.delState = delState;
    }

    public Integer getDelState() 
    {
        return delState;
    }
    public void setHasPromotion(Integer hasPromotion) 
    {
        this.hasPromotion = hasPromotion;
    }

    public Integer getHasPromotion() 
    {
        return hasPromotion;
    }

    public String getPerformKnow() {
        return performKnow;
    }

    public void setPerformKnow(String performKnow) {
        this.performKnow = performKnow;
    }

    public String getChildTicket() {
        return childTicket;
    }

    public void setChildTicket(String childTicket) {
        this.childTicket = childTicket;
    }

    public Integer getChildTicketType() {
        return childTicketType;
    }

    public void setChildTicketType(Integer childTicketType) {
        this.childTicketType = childTicketType;
    }

    public Long getOperaId() {
        return operaId;
    }

    public void setOperaId(Long operaId) {
        this.operaId = operaId;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public List<Long> getPerformIds() {
        return performIds;
    }

    public void setPerformIds(List<Long> performIds) {
        this.performIds = performIds;
    }

    public String getPerformTypeName() {
        return performTypeName;
    }

    public void setPerformTypeName(String performTypeName) {
        this.performTypeName = performTypeName;
    }

    public String getOperaName() {
        return operaName;
    }

    public void setOperaName(String operaName) {
        this.operaName = operaName;
    }

    public String getMaxPrice() {
        return maxPrice;
    }

    public void setMaxPrice(String maxPrice) {
        this.maxPrice = maxPrice;
    }

    public String getMinPrice() {
        return minPrice;
    }

    public void setMinPrice(String minPrice) {
        this.minPrice = minPrice;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Integer getAutType() {
        return autType;
    }

    public void setAutType(Integer autType) {
        this.autType = autType;
    }

    public Integer getIsTickets() {
        return isTickets;
    }

    public void setIsTickets(Integer isTickets) {
        this.isTickets = isTickets;
    }

    public String getHallName() {
        return hallName;
    }

    public void setHallName(String hallName) {
        this.hallName = hallName;
    }

    public EvaluateVo getEvaluateVo() {
        return evaluateVo;
    }

    public void setEvaluateVo(EvaluateVo evaluateVo) {
        this.evaluateVo = evaluateVo;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("performName", getPerformName())
            .append("performLength", getPerformLength())
            .append("performPoster", getPerformPoster())
            .append("performArea", getPerformArea())
            .append("releaseDate", getReleaseDate())
            .append("performBoxOffice", getPerformBoxOffice())
            .append("performIntroduction", getPerformIntroduction())
            .append("performPictures", getPerformPictures())
            .append("delState", getDelState())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("hasPromotion", getHasPromotion())
            .toString();
    }
}
